package sosopkpk;

public class J16Ch05Printers {

	public static void main(String[] args) {
		J16Printer p = new J16Printer("기본프린터", "삼성", "USB2.0");

		System.out.println(p.toString());

		J16InkjetPrinter ip = new J16InkjetPrinter("잉크젯프린터", "LG", "USB3.0");

		System.out.println(ip.toString());

		J16LaserPrinter lp = new J16LaserPrinter("레이저프린터", "HP", "인터페이스 병렬");

		System.out.println(lp.toString());

		J16PrinterService ps = new J16PrinterService();
		ps.print(p);
		ps.print(ip);
		ps.print(lp);

	} // main

} // class

class J16Printer {
	private String model;
	private String maker;
	private String interfaces;
	private int counts;
	private int remains;

	public J16Printer(String model, String maker, String interfaces) {
		this.model = model;
		this.maker = maker;
		this.interfaces = interfaces;
	}

	public String getModel() {
		return model;
	}

	public void setModel(String model) {
		this.model = model;
	}

	public String getMaker() {
		return maker;
	}

	public void setMaker(String maker) {
		this.maker = maker;
	}

	public String getInterfaces() {
		return interfaces;
	}

	public void setInterfaces(String interfaces) {
		this.interfaces = interfaces;
	}

	public int getCounts() {
		return counts;
	}

	public void setCounts(int counts) {
		this.counts = counts;
	}

	public int getRemains() {
		return remains;
	}

	public void setRemains(int remains) {
		this.remains = remains;
	}

	@Override
	public String toString() {
		String result = "";
		result += "모델명 : " + model + "\n제조사 : " + maker + "\n인터페이스 종류 : "
				+ interfaces + "\n인쇄 매수 : " + counts + "\n인쇄 종이 잔량 : "
				+ remains + "\n";
		return result;
	}
}

class J16InkjetPrinter extends J16Printer {
	// 부모 클래스에 기본생성자가 정의되지 않았기 때문에 자식 클래스에서 따로 생성자를 정의해야 함
	public J16InkjetPrinter(String model, String maker, String interfaces) {
		super(model, maker, interfaces);
		// super() - 부모 클래스의 생성자를 가리키는 말
	}
}

class J16LaserPrinter extends J16Printer {
	public J16LaserPrinter(String model, String maker, String interfaces) {
		super(model, maker, interfaces);
	}
}

interface J16PrinterIService {
	void print(J16Printer p);
} // interface

class J16PrinterService implements J16PrinterIService {
	@Override
	public void print(J16Printer p) {
		String result = p.getModel() + "가 출력합니다.";
		System.out.println(result);
	}
}